"""
等待机制
1、强制等待  time.sleep(5)  --设置一个固定的等待时长，代码运行到此处，会强行进行等待指定的时间
缺点：不能准确把握需要等待的时间
（1）有时操作还未完成，等待就结束了，导致报错；
（2）有时操作已经完成了，但等待时间还没有到，浪费时间；
（3）如果在用例中大量使用，会浪费不必要的等待时间，影响测试用例的执行效率
2、隐式等待  driver.implicitly_wait(10)  ---设置一个固定的等待时间，对整个生命周期的元素都起作用，每一个元素都会等待加载完全。知道超过设定的等待时间
（1）缺点：不灵活。它是针对find_element这类查找元素的方法生效的。对于页面上的其他交互（比如等待
元素可点击、等待某个文本出现），它无能为力。
（2）优点：只需要设置一次，全局生效，不用在每个查找元素的地方都写等待。比time.sleep智能，不到时
间元素出现了就继续执行，不浪费多余时间
注意：当前操作应用的也比较少，隐式等待只管找元素，不管元素的状态，如页面按钮延迟展示/灰色不可点击，这时候就会报错

3、显示等待
（1）优点：条件满足就立即执行
（2）缺点：代码写起来复杂一点，需要在需要的地方单独配置
（3）应用
 # 1）导入包
        from selenium.webdriver.support.wait import WebDriverWait
        from selenium.webdriver.support import expected_conditions as ec   --最后面的ec是重命名
 # 2）WebDriverWait和until()和expected_conditions一起使用
 示例：element = WebDriverWait(driver, 10).until(ec.presence_of_element_located((By.XPATH,"//input[@id='txtUName']")))
    WebDriverWait(driver,timeout,poll_frequency,ignored_exceptions)
        理解：
        &driver:浏览器，必传
        &timeout:指的是超时的时长，必传
        &poll_frequency:指轮询间隔，默认0.5s轮询一次，可忽略不传
        &ignored_exceptions:忽略的异常类型，默认为None
    until()/until_not()
        程序每隔xx秒看一眼，如果条件成立了，则执行下一步；否则继续等待，直到超过设置的最长时间，然后抛出 TimeoutException 异常
    expected_conditions
        是Selenium的一个模块，主要用于对页面元素的加载进行判断，包括元素是否存在，可点击等等
        条件：
        （1）通过元素是否可见来判断：presence_of_element_located(locator) 、 visibility_of_element_located(locator)
            #presence_of_element_located(locator)
                理解：判断某个元素是否被加到了dom树里，并不代表元素一定可见（只要是加载到dom中能定位到即可）
                示例：
                    el_ec = (By.XPATH, '//*[@id="txtUName"]')
                    el = WebDriverWait(driver, 30).until(EC.presence_of_element_located(el_ec))
                    el.send_keys('xxx')
            #visibility_of_element_located(locator)
                理解：判断某个元素是否可见，可见代表元素非隐藏，并且元素的宽高都不等于0（元素加载到dom树中也必须可见）
                示例：
                    pwd_el = (By.XPATH, '//*[@id="txtPassword"]')
                    pwd = WebDriverWait(driver, 30).until(EC.visibility_of_element_located(pwd_el))
                    pwd.send_keys('xxx')
            #element_to_be_clickable(locator)
                理解：判断某个元素是否存在并且可操作（比较常用）
                示例：
                    bt_ec = (By.XPATH, '//*[@id="btnLogin"]')
                    bt = WebDriverWait(driver, 30).until(EC.element_to_be_clickable(bt_ec))
                    bt.click()

        （2）通过等待的元素包含的内容来判断
        （3）通过页面标题来判断：title_is (title) 、 title_contains (title)
            #title_is (title)
                理解：判断当前页面的title是否完全等于预期字符串，返回布尔值
                示例：
                    el=WebDriverWait(driver,10).until(EC.title_is("读书屋_原创小说网站"))
                    print('测试标题-相等：',el)
            #title_contains (title)
                理解：判断当前页面的title是否包含预期字符串，返回布尔值
                示例：
                    el=WebDriverWait(driver,10).until(EC.title_contains("读书屋"))
                    print('测试标题-包含：',el)



















"""